package com.shg.service.impl;

import java.math.BigInteger;
import java.util.LinkedHashMap;
import java.util.List;

import org.springframework.stereotype.Service;

import com.shg.bean.Admin;
import com.shg.bean.Power;
import com.shg.bean.QueryResult;
import com.shg.bean.Roles;
import com.shg.service.RolesService;

@Service
public class RolesServiceBean extends BasiceDaoImpl<Roles> implements RolesService {


	/**
	 * 给指定的某个角色授权,可以同时授予多个权限
	 * @param power权限列表
	 *  @param role 角色ID
	 */
	public void addPower(Integer[] power,Integer role){
		for(int i=0;i<power.length;i++){
			String sql="insert into role_power(role_id,power_id)values("+role+","+power[i]+")";
			sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
		}
	}
	/**
	 *分页查询所有的角色
	 * @param firstResult 查询的起始位置
	 * @param maxResult 每页显示的最大记录数
	 * @return
	 */
	public QueryResult<Roles> getAllRole(int firstResult,int maxResult){
		LinkedHashMap<String, String> orderby=new LinkedHashMap<String, String>();
		orderby.put("id", "asc");
		QueryResult<Roles> result = getPagination(Roles.class, firstResult, maxResult, orderby);
		return result;
	}
	/**
	 * 查询指定角色下的权限列表，并设置为选择状态
	 */
	@SuppressWarnings({ "unchecked" })
	public List<Power> getPowerList(long roleid){
		List<Power> allPower = sessionFactory.getCurrentSession().createQuery("from Power").list();
		if(allPower.size()>0){
			String sql="select power_id from role_power where role_id="+roleid;
			List<BigInteger> powerid = sessionFactory.getCurrentSession().createSQLQuery(sql).list();
			for(BigInteger id:powerid){
				for(Power power:allPower){
					if(id.longValue()==power.getId()){
						power.setCheck(true);
						break;
					}
				}
			}
		}
		return allPower;
	}
	/**
	 * 更新某个角色的权限
	 * @param powerid  权限列表
	 * @param roleid 角色ID
	 **/
	public void updatePower(long[] powerid,long roleid){
		String sql="delete from role_power where role_id="+roleid;
		sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
		if(powerid.length>0){
			for(long id:powerid){
				sql="insert into role_power(role_id,power_id) values(";
				sql+=roleid+","+id+")";
				sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
			}
		}
	} 
	/**
	 * 查询所有的用户
	 * 然后设置查询出来的用户的check属性值
	 * 	 					0、标识该用户还没有设置角色 
	 *   					1、标识该用户就是当前角色下的用户
	 *   					2、表示该用户是别的角色下的用户
	 * @param id 角色的id
	 * 
	 */
	@SuppressWarnings("unchecked")
	public List<Admin> getAdminList(long roleid) {
		//查询所有的用户
		String sql="from Admin ";
		List<Admin> list = sessionFactory.getCurrentSession().createQuery(sql).list();
		for(Admin admin:list){
			if(admin.getRole()==null){
				admin.setCheck(0);
			}else if(admin.getRole().getId()==roleid){
				admin.setCheck(1);
			}else{
				admin.setCheck(2);
			}
		}
		
		return list;
	}
	/**
	 * 更新角色的用户列表
	 * 
	 * @param roleid 角色的ID
	 * @param adminid 用户的id
	 */
	public void updateRoleAdmin(long roleid, long[] adminid) {
		//将该角色下的所有用户有删除掉
		String sql="update admin set role_id =null where role_id="+roleid;
		sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
		//重新设置该角色的用户
		if(adminid!=null){
			sql="update admin set role_id="+roleid+" where id in(";
			for(long id :adminid){
				sql+=id+",";
			}
			sql=sql.substring(0, sql.lastIndexOf(","))+")";
			sessionFactory.getCurrentSession().createSQLQuery(sql).executeUpdate();
		}
	}
	
	public QueryResult<Roles> updateLockRole(Roles role,int firstResult, int maxResult) {
		String sql="update Roles set state="+role.getState()+" where id="+role.getId();
		sessionFactory.getCurrentSession().createQuery(sql).executeUpdate();
		QueryResult<Roles> result= getAllRole(firstResult, maxResult);
		return result;
	}
	/**
	 * 更新角色
	 */
	public void updateRole(Roles role) {
		String sql="update Roles set name='"+role.getName()+
						"',remarks='"+role.getRemarks()+"' where id="+role.getId();
		sessionFactory.getCurrentSession().createQuery(sql).executeUpdate();
	}
}
